/**
 * 文本三要素
 */
export interface SeaFont {
    /**  文字 **/
    label: string;
    /**  样式 **/
    style: string;
    /**  图标 **/
    icon: string;
}

/**
 * 步骤条、面包屑元素
 */
export interface StepFont {
    /**  静默样式 **/
    prepare: SeaFont;
    /**  激活样式 **/
    working: SeaFont;
    /**  完成样式 **/
    complete: SeaFont;
}


/**
 * 默认步骤条样式
 */
export class DefaultStepFont implements StepFont {
    /**  静默样式 **/
    prepare: SeaFont;
    /**  激活样式 **/
    working: SeaFont;
    /**  完成样式 **/
    complete: SeaFont;

    /**
     * 简单的步骤条元素
     *
     * @param label 步骤名称
     */
    constructor(label) {
        this.prepare = {label: label, icon: 'fa fa-fw fa-check-circle-o', style: 'text-success'};
        this.working = {label: label, icon: 'fa fa-fw fa-edit', style: 'text-primary'};
        this.complete = {label: label, icon: 'fa fa-fw fa-circle-thin', style: 'text-gray'};
    }
}

/**
 * 表格 - 数据编辑结果
 */
export interface Modified {
    /**
     * 修改之后的值
     */
    value: any;
    /**
     * 修改的字段名
     */
    field: string;
    /**
     * 预留数据 ID，如果存在的话
     */
    id: unknown;
    /**
     * 预留原始数据对象实体，如果存在的话
     */
    ref: unknown;
}

/**
 * 表格 - 编辑即时保存的回调函数
 *
 * 完成单元格数据编辑之后，触发当前函数
 */
export type ModifiedMethod<T> = (evt: string, row: T, arg: Modified) => void;

/**
 * 表格 - 数据校验校验信息
 */
export interface Validation {
    /**
     * 数据校验结果
     */
    valid: boolean | undefined

    /**
     * 消息
     */
    message: string
}

/**
 * 表格 - 分页数据
 *
 * 约定俗称的数据格式，后台需要按照这种方式返回数据
 */
export interface PaginatedData {
    /**
     * 当前页的数据
     */
    list: any[],

    /**
     * 数据总量
     */
    total: number
}
